/*
 *Copyright 广东省深圳市动感蓝天教育  All Rights Reserved. 
 *Written by:weidan     2013-1-10 
 *QQ:956698821
 *Email:weidanhappy@sina.cn
 *Remark:This class is used to complete time disposal
 */
package net.skyedu.utils;

import java.sql.Date;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;


/**
 * @author weidan date:2013-1-10 Remark:
 */
public class TimeUtil {

	/**
	 * @author weidan 2013-1-10 上午11:35:40
	 * @param date
	 *            java.sql.date类型的时间
	 * @param date
	 *            DateStyle 枚举类型，需要转换的数据的格式
	 * @return String remark: 主要的作用是将 java.sql.Date转换成为字符串类型
	 */
	public static String intoString(Date date,DateStyle dateStyle) {
		// 获取SimpleDateFormat的实例
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
				dateStyle.toString());
		// 返回字符串类型的数据
		return simpleDateFormat.format(date);
	}

	/**
	 * @author weidan       2013-3-1 下午3:14:59
	 * @param datebegin
	 * @param dateend
	 * @param dateStyle
	 * @return
	 * remark:查看两个时间相距多少小时
     */
	public static String datedistance(String datebegin,String dateend,DateStyle dateStyle){
		Date date1 = intoDate(datebegin,dateStyle);
		Date date2 = intoDate(dateend,dateStyle);
		long distancemilliseconds = date2.getTime()-date1.getTime();
		double distancehourse = (((double)distancemilliseconds/1000/60));
		DecimalFormat df=new DecimalFormat("######0.00"); 
		return df.format(distancehourse)+"分钟";
	}
	
	
	/**
	 * @author weidan 2013-1-10 上午11:50:53
	 * @param dateStr
	 *            字符串类型的时间数据 
	 * @param dateStyle
	 *            传入的字符串的类型 DateStyle的枚举类型
	 * @return java.sql.Date 如果传进来的字符串不满足要求那么返回当前的系统时间作为代替 remark:
	 *         主要的作用是将字符串类型的数据转换成为java.sql.date
	 */
	public static Date intoDate(String dateStr,DateStyle dateStyle) {
		if (null == dateStr) {
			//如果传进来的是空字符，那么我们需要返回系统时间
			return new Date((new java.util.Date()).getTime());
		}
		// 获取SimpleDateFormat的实例
		SimpleDateFormat sdf = new SimpleDateFormat(dateStyle.toString());
		// 先获取到java.sql.Date类型的父类型java.Util.Date 对应的对象
		java.util.Date indate = null;
		try {
			// 将字符串转换成为时间类型
			indate = sdf.parse(dateStr);
		} catch (ParseException e) {
			// 异常信息返回给用户
			e.printStackTrace();
			// 如果时间类型不符合要求，那么我们需要返回系统时间
			return new Date((new java.util.Date()).getTime());
		}
		// 从uilt包下的时间获取到毫秒数，然后以毫秒数新建一个sql包下的Date类型
		return new Date(indate.getTime());
	}
	
	
	    /**
	     * @author weidan       2013-1-10 下午12:20:05
	     * @return  java.sql.Date 
	     * remark: 获取到当前的系统时间
	     */
		public static Date getSystemDate(){
			return new Date((new java.util.Date()).getTime());
		}
		
		
		/**
		 * @author weidan       2013-1-10 下午12:22:43
		 * @return String
		 * remark: 获取到当前的系统时间
		 */
		public static String getStringSystemDate(DateStyle dateStyle){
			return intoString(getSystemDate(),dateStyle);
		}
	
		
		/**
		 * @author weidan       2013-1-10 下午12:48:07
		 * @return long类型的数据
		 * remark: 获取到当前系统时间的毫秒数
		 */
		public static long getSystemTimeMilliSecond(){
			return (new java.util.Date().getTime()); 
		}
	
		
		public static void main(String[] args) {
			Date date = intoDate("2013-02-25 23:59:59", DateStyle.yyyy_MM_dd_HH_mm_ss);
		   System.out.println(date);
		}
		
		
}
